package com.augurit.smartform.service;


import java.util.List;
import java.util.Map;

import org.springside.modules.orm.Page;

import com.augurit.common.base.form.Attachment;
import com.augurit.smartform.exception.FormException;
import com.augurit.smartform.web.component.form.ComponentDefinitionForm;

public interface IComponentDefinitionService {
	/**
	 * 根据主键获取Form对象
	 */
	public ComponentDefinitionForm get(Long id);
	
	/**
	 * 根据分页对象和Form对象进行分页条件查询
	 * @param page 分页对象
	 * @param form Form对象
	 * @return 分页查询结果.附带结果列表及所有查询时的参数
	 */
	public Page<ComponentDefinitionForm> search(Page<ComponentDefinitionForm> page, ComponentDefinitionForm form);
	
	/**
	 * 根据组件目录ID查询组件
	 * @param registerId
	 * @return
	 */
	public List<ComponentDefinitionForm> getDefinitionByRegisterId(Long registerId);
	
	/**
	 * 禁用某个组件目录下面的所有组件
	 * @param registerId
	 */
	public void disableByRegisterId(Long registerId);
	
	/**
	 * 启用某个组件目录下面的所有组件
	 * @param registerId
	 */
	public void enableByRegisterId(Long registerId);
	
	/**
	 * 处理组件定义XML文件
	 * @param attachment
	 * @param form
	 */
	public void handleXmlFile(Attachment attachment,ComponentDefinitionForm form) throws FormException;
	
	/**
	 * 保存组件
	 * @param form
	 */
	public void save(ComponentDefinitionForm form);
	
	/**
	 * 禁用组件
	 * @param form
	 */
	public void disable(ComponentDefinitionForm form) throws FormException;
	
	/**
	 * 启用组件
	 * @param form
	 */
	public void enable(ComponentDefinitionForm form) throws FormException;
	
	/**
	 * 拖拽组件
	 * @param form
	 */
	public void dragComponent(ComponentDefinitionForm form) throws FormException;
	
	/**
	 * 删除组件
	 * @param form
	 */
	public void delete(ComponentDefinitionForm form);
	
	/**
	 * 获得表单所有可用的组件
	 * @return
	 */
	public List<Map> getAllAvailableComponent();
	
	/**
	 * 更新组件图标
	 * @param form
	 */
	public void updateIcon(ComponentDefinitionForm form) throws FormException;
}
